/**
 * @description admin service
 */

const _ = require('lodash')
const AdminModel = require('../model/admin')

/**
 * 查询单个数据
 * @param {string} username username
 * @param {string} password password
 */
async function findOneAdmin(username, password) {
  // 拼接查询条件
  const whereOpt = {}
  if (username) {
    Object.assign(whereOpt, { username })
  }
  if (password) {
    // 用户名和密码在一块，因为密码可能重复
    Object.assign(whereOpt, { username, password })
  }

  // 无查询条件，则返回空
  if (_.isEmpty(whereOpt)) return null

  const result = await AdminModel.findOne(whereOpt)

  return result
}

/**
 * 创建管理员
 * @param {object} adminData adminData
 */
async function createAdmin(adminData) {
  const result = await AdminModel.create(adminData)
  return result
}

/**
 * 修改管理员信息
 * @param {string} username username
 * @param {object} data 用户信息，要符合 AdminModel 的属性
 * @returns {Promise<boolean>} true/false
 */
async function updateAdmin(username, data = {}) {
  if (!username) return false
  if (_.isEmpty(data)) return false // 没有要修改的
  const result = await AdminModel.findOneAndUpdate({ username }, data, { new: true })
  return !!result
}

module.exports = {
  findOneAdmin,
  createAdmin,
  updateAdmin
}
